//首先写一个类的思想是想你这个list链表里都得有哪些元素，即哪些成员变量跟方法有第一个结点，最后一个结点,每个结点的关系，前结点，下一个结点，结点里的元素
public class MyLinkList {
     Node first;
     Node last;
    //原链表的最后一个结点，原链表的第一个结点,结点
     int size;
    //size表示结点的数量
    public void addfirst(Object ele){
        Node node=new Node(ele);
        if(size==0){
        this.first=node;
        this.last=node;}
        else{
            node.next=this.first;
            this.first.prev=node;
            this.first=node;
            //this.first.next=this.first;
            //this.first.prev=node;
            //this.first=node;
        }
        size++;
    }
    public void addlast(Object ele) {
        Node node = new Node(ele);
        //需要的结点包装起来，即结点里带着元素
        //这个new的对象是已知的需要保存的结点对象，即当前结点,node里还带着元素,node这个对象就是当前结点
        if (size == 0) {
            this.first = node;
            this.last = node;
        } else {
            this.last.next = node;
            node.prev = this.last;
            this.last = node;
        }
        size++;
    }

    @Override
    public String toString()throws NullPointerException {
        if(size==0){
            return null;
        }
        StringBuffer str =new StringBuffer(size*2+1);
        //要把MYlist遍历，字符串打印就是用tostring方法打印，
        str.append("[");
        //由于是从最后一个元素加入其他元素，并且遍历从第一个元素开始遍历
        Node current=this.first;
        for(int i=0;i<size;i++){
        str.append(current.ele);
        if(i!=size-1){
            str.append(",");
        }
        else{
            str.append("]");
        }
        current=current.next;
        }
        return str.toString();




    }
    class Node{
        //对于结点node有前结点，下一个结点，每个结点里带有一个元素
        Node prev;
        Node next;
        Object ele;
        public Node(Object ele){
            this.ele=ele;
        }


    }

}


